  -=( 7A69#11 )=--=( art12 )=--=( Introduccion al Ip-Spoofing )=--=( mnm )=-

---[ Contenidos ]
   1. Introduccion
   2. Que es IP-spoofing?
   3. Antes de empezar
   4. Lo que vas a necesitar
   5. Empezamos o que?
   6. Blind Spoofing
   7. Los varios ataques
   8. Formas de prevenir
   9. Terminamos? Por hoy.

---[ 1. Introduccion ]

Buenas. Hay varias razones por las que he escrito este articulo.
La primera es que no he encontrado mucha documentation  sobre el
IP-spoofing en castellano.Tambien escribi esto porque es un tema
que me mola mucho y francamente al escribir esto he aprendido un
monton de cosas nuevas.

El nivel de este articulo no es muy alto, pero, conocimientos de
TCP/IP y Unix son necesarios. Afortunadamente hay bastantes text
sobre esos tema ( Aun asi, entrare basicamente en el tema de TCP
y sus flags (o banderas) y IP ).

Antes de empezar solo mencionar que este documento se ha escrito
solo con fines educativos para los interesados. El autor (yo) no
se hara responsable de cualquier mal uso de esta informacion.
Blah. Blah. Blah. :P

Sin perder mas tiempo: empezemos con lo bueno. ;)

---[ 2. Que es IP-spoofing? ]

La definicion de IPspoofing ha sido moldeada equivocadamente por
varias personas que no acaban de entender su pocos conocimientos
TCP/IP. Yo definiria IP-spoofing de la siguiente manera:

"Tecnica usada para obtener access (no autorizado) a una maquina
 mediante suplantacion de identidad."

Haber, me explico. IP-spoofing a nivel teorico consiste en hacer
creer a la maquina en la que estamos interesados creer que somos
alguien que no somos (alguna otra maquina en la que confian). Lo
que hariamos es pasar por otra  identidad de un "trusted" host o
direccion IP. Para poder llevar a cabo un ataque con IP-spoofing
hace falta encontrar una direcion IP de un host en el que confie
la maquina que sera atacada.Despues el atacador debera modificar
las cabezeras  para que parezca que los paquetes  proceden de el
host de confianza (y su puerto).

*NOTA: Hay muschos tipos de IP-spoofing. Como Non-blind Spoofing
que tienes un significado algo diferente. Los comento mas abajo.

---[ 3. Antes de empezar ]

Antes de empezar voy a repasar  muy brevemente las cosas que hay
que saber para poder entender correctamente el funcionamiento de
los IP-spoofs (para eso estamos no, para saber como funciona las
cosas ;). Para correctamente entender y efectuar ataques de tipo
IP-spoofing no hay que ser ningun genio pero saber algo del Unix
y TCP/IP es fundamental. 

Antes de leer este articulo os sugiero que leeais los documentos
de TCP/IP y Unix que hay (son muchos, hasta en castellano). Aqui
entrare solo elementariamente en como funciona TCP/IP, pero como
dije leete lo que ya hay.

Una conexion es dependente de 4 parametros:  un source host y su
puerto, un host destinario y su puerto.  Cuando la conexion haya
sido establecida los datos son mandado desde un host y un puerto
a el otro  mediantes paquetes. Los paquetes se encargan del "low
level traffic"  (trafico de bajo nivel), y tambien se asegura de
que los datos llegan  a su destino. La mayoria de redes se basan
en IPv4 (IP version 4) porque es totalmente independiente de los
protocolos de hardware.

TCP es un protocolo de un nivel mas alto es envuelto en paquetes
IP. Todos los paquetes consisten en una *cabezera y datos.

*Cabezera:
Aqui esta la direccion IP de el host de origen y el host destino
para el paquete. Y el tipo de protocolo envuelto en el.

Un paquete TCP contienen el numero del puerto de origen y el del
host destino. Tambien contiene numeros de sequence y acknowledge
( SEQ/ACK ) y varias banderas ("flags"). Para terminar explicare
rapidamente SEQ/ACK y las banderas.
Numero SEQ: este es contado byte por byte, y sirve para darte el
            numero del siguiente byte que debe ser mandado.
Numero ACK: Es el numero SEQ que se espera de el otro host.

Las banderas de TCP son URG, PSH, RST y FIN. No voy a explicaros
nada mas en este articulo, porque, como ya  os dije hay bastante 
documentacion escrito sobre este tema.

---[ 4. Lo que vas a necesitar ]

En este capitulo solo voy a mencionar, para los que no lo tienen
tan claro, las herramientas que son necesaria para llevar a cabo
un ataque de IP-spoofing (o cualquier ataque por el estilo, como
"sequence number attacks").

Todo lo que hago en este documento esta probado en un linux. Asi
que seria perfecto tener a tu disposicion un sistema *nix. Linux
es una buena eleccion.

Tambien vas a necesitar un generador de  paquetes. Esto genera y
manda  paquetes que tu sepecificas. Incluye las banderas, numero
SEQ, el tamano de ventana y lo demas que veras en un paquete. Un
buen generador de paquetes es Libnet o Spak.

Lo siguiente que vas a necesitar para tus trabajos es un sniffer
de paquetes. Uno de los mas famosos es Sniffit. Un programa como
este te dejara leer la cabezera de un paquete especifico.

Y claro como no, vas a necesitar un host de confianza, un host a
atacar y un host para el ataque (tu? ;).

Aqui tienes las URLs:

Sniffit - http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
Spak - http://freeport.xenos.net/~xenon/software/spak/index.html
Libnet - http://www.packetfactory.net/libnet/

---[ 5. Empezamos o que? ]

Empezemos con el tema este del host de confianza. Como ya debeis
saber, en el mundo Unix se puede dar a unos host especificos una
posicion de confianza. Que quiero decir con esto?

Pues, por ejemplo entre dos hosts un admin puede hacer/crear una
situacion de confianza. Ahora hablare en terminos de host A y B.
Si los admins tienen un "pacto" puede hacer lo siguiente para no
tener que loguear con un password cada vez que quieran acceder a
la maquina del otro:
En el host A: 'echo "B nombreusario" > ~/.rhosts'
Y en host B: 'echo "A nombreusario" > ~/.rhosts'

Esto tambien lo podria hacer root a nivel del host entero simple
con editando el /etc/hosts.equiv. Bueno, ahora cualquiera de los
dos hosts podrian  acudir a la otra maquina con los comandos del
tipo r* (como rlogin) sin tener que preocuparse de las password.
Esto funcionaria solo si la conexion procede del la IP correcta.
Hay  informacion ya disponible sobre los  comandos r* asi que no
gastare el tiempo explicandolo en mas detalle.

Como mencione antes, para que dos hosts intercambien informacion
hace falta, en TCP, realizar una  conexion. Esto se hace el tres
pasos (llamado 3-way handshake). El proceso  seria asi (si no lo
entiendes, te avise que comprendas TCP antes de leer esto):

M   Host    Proceso    Host
1    A    ---SYN--->    B
2    A   <--SYN/ACK--   B
3    A    ---ACK--->    B

Lo explico, M es un momento de tiempo. No tiene un tiempo exacto
pero es un momento de tiempo. Entiendes (joder que mal explicado
eh?)? En el primer momento de tiempo (1) el cliente le dice a el
servidor que desea un conexion. El servidor, al recibir este SYN
responde el ISN (initial sequence number) y le devuelve  al host
A (cliente) un ACK como respuesta (que dentro del  cliente seria
ISN + 1). Finalmente, el cliente debe mandar un ACK al ISN de el
servidor (3). Ahora pueden intercambiar datos.

Te sugiero que leas sobre ISN si no lo entiendes muy bien.


---[ 6. Blind Spoofing ]

Bien, IP-spoofing es algo bastante trivial porque hay que elegir
un host a atacar. Despues hay que descubrir algun host que tenga
una situacion de confianza con ese host. Despues los numeros SEQ
son analizados. Ahora viene la suplantacion de identidad el host
de confianza  debe ser imitada por el atacante. Hay que adivinar
los  numeros SEQ, despues intentas  conseguir una conexion a con
un servicio que solo requiere autentificacion de direccion (IP).
Lo mas frequente para hacer ahora es poner un backdoor y volver.

Esto se llama 'Blind Spoofing'. Hay otro tipo de IP-spoofing que
no tratare en  este documento (prometo hacerlo en otro). El otro
tipo  de spoofing se llama 'Non-blind Spoofing', pero este trata
mas con ataques de DoS. Y DoS no me mola tanto.

Lo ataques IP-spoofing se hacen desde un host atacante con root.
Y se ataca para conseguir root (a que no sabias eso? ;). Tambien
ten en cuenta que hay que deshabilitar el host de confianza. Hay
que practicamente hacer que el host que  deseas atacar creer que
esta manteniendo una  conversacion con el host de confianza. Por
eso hay que casi advinar que esta esperando el host recibir. Con
algo de intelligencia, se puede adivinar, si entiendes bien como
TCP/IP, que espera  recibir el host. Por eso se le  llama a esto
'Blind Spoofing' (Spoofing Ciegamente).

---[ 7. Los varios ataques ]

El primer proceso que debe hacer es descubrir que hosts tiene en
su lista de confianza tiene el host objetivo. Esto puede ser muy
dificil. Por desgracia no hay ninguna forma de saberlo, pero con
algo de suerte alguna tecnica funcionara. Primero puedes ver con
'showmount -e' que resultados  te devuelve (esto te demostrara a
donde son exportados algunos sistema de ficheros). Tambien algun
rpcinfo puede servir de algo. Si se sabe bastante  sobre el host
no deberia ser muy dificil encontrarlo. Intenta ingeniate alguna
forma y lo compartes con el grupo ;).

El siguiente ataque es de deshabilitar el host de confianza. Por
que si no lo haces, te puede  fastidiar todo el ataque. Lo mejor
es meterle en  un ataque de DoS. La tecnica que voy  a demostrar
ahora se llama TCP SYN Flooding (por daemon9/route/infinity). 

Como ya vimos anteriormente una conexion TCP se inicia con el 3-
way handshake (mira arriba). Pues hay un limite al numero de SYN
peticiones puede hacer un cliente. El limite se llama el backlog
Entonces, la pila de TCP tiene una tablita de un tamano limitado
en la que guarda el estado de las conexiones a medio establecer.
En situaciones normales seran pocas las conexiones en esta tabla
asi que la tabla  es muy corta. La tecnica, que si mandas muchas
peticiones de inicio de conexion pero no llegas a establecerlas,
saturas la tabla. Esto es porque cada entrada tiene un tiempo de
timeout, tras el cual se libera pero, como hay pocos libres y el
tiempo  el relativamente grande. Asi que es muy facil saturar la
tabla y causar una situacion de DoS.

Ten en cuenta que los  kernels mas nuevos tienen proteccion para
este tipo de ataque DoS. Pero afortunadamente, (una tonteria) el
parche para esto no esta activada por defecto, sobre todo kernel
pre-compilados.

Abajo demostrare el DoS en  una forma grafica pero aun asi seria
buena idea mirar el articulo de daemon9 - Phrack: 49 Art: 07.

    Host    Proceso    Host
1   Z(x)   ---SYN--->   B
    Z(x)   ---SYN--->   B
    Z(x)   ---SYN--->   B
    Z(x)   ---SYN--->   B
    Z(x)   ---SYN--->   B
    Z(x)   ---SYN--->   B
		........
2    X    <--SYN/ACK--  B
     X    <--SYN/ACK--  B
     X    <--SYN/ACK--  B
		........
3    X     <---RST---   B

Es facil verdad? El atacante manda varias peticiones SYN al host
para llenar el backlog. Despues el host objetivo responde a esas
peticiones. Y finalmente el RST. Los backlogs  vienen en tamaos
diferentes, en BSD generalmente son 5 y en Linux 6.

Bueno, lo siguiente. Trabajar con  las SEQ y adivinando la cosa.
Ahora el atacante debe saber donde en el espacio de 32-bit de el
numero de SEQ esta TCP. Conectas a un puerto en la maquina donde
esta el objetivo (puerto 25 es una buena eleccion). Este proceso
es el mismo que el 3-way handshake pero ahora el atacante guarda
el valor del ISN mandado por el host objetivo. Esto es para con-
seguir el RTT (round-trip time),  averiguas el tiempo y calculas
la media. Asi el atacante sabra el tiempo para averiguar cual es
el siguiente ISN y sabra el numero SEQ que esta aumentando (por:
128,000/sec y 64,000 por conexion). Asi tendra una buena idea de
cuanto tardara para  un datograma de IP viajar por internet para
llegar al host objetivo.
NOTA: Sera similar a la mitad de RTT ya que es casi siempre sym-
metrica. Tambien recuerda  que como llegue otra peticion al host
la ISN sera 64,000 mas.


---[ 8. Formas de prevenir ]

Pues como ya dije, el DoS por ejemplo, podria ser controlado con
solo activar el parche en el kernel. Pero  el IP-spoofing basico
tambien puede ser controlado.

La forma mas clara, es no tener  ningun host de  confianza en tu
maquina. Y forzar a los usarios a loguear con telnet, shh, etc..
usando el nombre de usuario y la password.

Tambien muchos routers modernos ayudan a prevenir los ataques de
este tipo. Y solo con activar un filtrado de todo el trafico que
viene desde fuera de tu LAN debes estar bastante mas a salvo.

Finalmente solo mencionar brevemente que la cryptografia para el
flojo de datos (trafico) en tu  red sea encriptada. Pero yo creo
que eso seria un coniazo :P.


---[ 9. Terminamos? Por hoy. ]

Antes de concluir quisiera decir que tendre pronto en mi web los
sources para programas  de IP-spoofing. Creo que tendre un sitio
para que todo los hispanos que creamos algun script o prog de IP
spoofing lo tengamos  todo juntito. Y tambien, subire pronto una
tradducion y un tutorial de 'spoofit.h' de Brecht Claerhout.

"Spoofit.h" esta lleno de funciones  para facilitar el coding de
programas de spoofing. Estara traducido pronto para todos usteds
en mi web ( http://mnm.elein.net )

Eso es todo... por hoy!

By: mnm (mnm@elein.net)
Web: http://mnm.elein.net
Greetz: trycky, Anarion, JeT-Li, harvenz, Ripe, Lyk, Doing,
        ladylizar, ICEFIRE, Era, iriinia, ddf, RooTDoWN, YbY,
        mAnu8, Ca|n, tuxisuau, Ainaker, "#linux-malaga y #root".
Special: failure (thx for the help :P)

En http://mnm.elein.net , pronto habra 
          kiero hacer para hostear en un mismo sitio todo los programas
          practicos de IP-spoofing creados por gente de habla hispana. y que
          pronto tendre la web preparada o algo asi


-=(EOF)=-